/*
 * Compresor.cpp
 *
 *  Created on: 07/09/2012
 *      Author: guidi
 */

#include "compresor.h"
#include "const.cpp"
#include "contenedor-nombre-archivo.h"

#include <iostream>
#include <exception>
#include <fstream>
#include <cstring>
#include <climits>

Compresor::Compresor() {

}

Compresor::~Compresor() {
}

int Compresor::comprimir(std::ifstream* entrada, std::ofstream* salida) {
	this->entrada = entrada;
	this->salida = salida;
	procesar();
}

void Compresor::procesar() {
	tamanio = 1;
	char temp;
	entrada->get(temp);
	actual = temp;
	char siguiente;
	while (!entrada->eof()) {
		entrada->get(siguiente);
		if ((actual == siguiente) && (!entrada->eof())) {
			tamanio++;
			if (tamanio == UCHAR_MAX) {
				flush();
				tamanio = 0;
			}
		} else {
			flush();
			actual = siguiente;
			tamanio = 1;
		}
	}
}

void Compresor::flush() {
	salida->put(tamanio);
	salida->put(actual);
}
